﻿/*
蛇形数表 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
Ray 对数字有很深的兴趣，有一天在数学书上看到一道3*3的幻方题目，他很快就解决了，闲着无聊，就写起了数字：
1 2 3 6 5 4 7 8 9 3 4 5 8 7 6 9 1 2 细心的同学很快就会发现规律了。
其实数字的增大是循着固有的路线的。当数字变化到最大后又回到从1开始逐渐变大。 

Input:
第一行是一个整数N，表示数据的组数。每组数据只有一行，为两个整数M、K。
M（表示一个M*M的表格），表格里的第一个数字为K。
1<=N<=20，1<=M<=9，1<=K<=M*M。 
Output:
输出填满了数的表格，每个数的输出宽度为4，每组输出之间空一行，最后一组数据后没有空行。 
Sample Input:
2
3 1
3 8
Sample Output:
1   2   3
6   5   4
7   8   9

8   9   1
4   3   2
5   6   7
*/
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;

int main()
{
	bool first_time = true;

	unsigned n;
	cin >> n;
	while (n--)
	{
		int m, k;
		cin >> m >> k;

		if (!first_time)
		{
			cout << endl;
		}

		int dir = 1; //if reverse dir=false 
		unsigned loop = m * m;
		for (unsigned i = 1; i <= loop; ++i)
		{
			cout << setw(4) << k;

			if (0 == i % m)
			{
				//k=(k+m)%loop;
				k += m;
				if (k > loop)
					k -= loop;
				dir = -dir;
				cout << endl;
			}
			else
				//	k=(k+dir)%loop;
			{
				k += dir;
				if (k == (loop + 1))
					k = 1;
				else if (0 == k)
					k = loop;
			}
		}
		first_time = false;
	}
	return EXIT_SUCCESS;
}